// 引入创建 HTTP 错误的模块
var createError = require('http-errors');
// 引入 Express 模块
var express = require('express');
// 引入路径模块
var path = require('path');
// 引入 Cookie 解析器模块
var cookieParser = require('cookie-parser');
// 引入日志记录模块
var logger = require('morgan');
// 引入首页路由模块
var indexRouter = require('./routes/index');
// 引入用户路由模块
var usersRouter = require('./routes/users');
// 引入书籍路由模块
var bookRouter = require('./routes/book');
// 引入登录路由模块
var loginRouter = require('./routes/login');
// 创建 Express 应用实例
var app = express();
// 设置视图引擎
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// 使用日志记录中间件（开发环境）
app.use(logger('dev'));
// 使用 JSON 解析中间件
app.use(express.json());
// 使用 URL 编码解析中间件（扩展模式为 false）
app.use(express.urlencoded({ extended: false }));
// 使用 Cookie 解析中间件
app.use(cookieParser());
// 使用静态文件中间件
app.use(express.static(path.join(__dirname, 'public')));
// 使用首页路由
app.use('/', indexRouter);
// 使用用户路由
app.use('/user', usersRouter);
// 使用书籍路由
app.use('/book', bookRouter);
// 使用登录路由
app.use('/login', loginRouter);
// 捕获 404 错误并转发到错误处理中间件
app.use(function(req, res, next) {
  next(createError(404));
});
// 错误处理中间件
app.use(function(err, req, res, next) {
    // 设置本地变量，仅在开发环境提供错误信息
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};
  // 渲染错误页面
  res.status(err.status || 500);
  res.render('error');
});
module.exports = app; // 导出应用实例
